package org.example.shop_front_api.utils;

import com.google.gson.Gson;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Random;
import java.util.UUID;
import java.util.regex.Pattern;

public class Tool {

    //当前时间戳
    public static int getCurrentTime() {
        return (int) Instant.now().getEpochSecond();
    }

    //uuid生成
    public static UUID getUUID() {
        return UUID.randomUUID();
    }

    //手机号码格式检查
    public static Boolean isMobile(String mobile) {
        String mobileRule = "^1[3-9]\\d{9}$";
        return Pattern.matches(mobileRule, mobile);
    }

    //密码格式验证
    public static Boolean isValidPassword(String password) {
        String passwordRule = "^(?=.*[^\\d]).{8,}$";
        return Pattern.matches(passwordRule, password);
    }

    //身份证格式验证
    public static Boolean isValidIdCard(String idCard) {
        String idCardRule = "^[1-9]\\d{5}(19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
        return Pattern.matches(idCardRule, idCard);
    }

    /**
     * 生成指定位数的随机数字（首位不为0）
     * @param digits 位数（正整数）
     * @return 随机数字
     */
    public static long generateRandomNumber(int digits) {
        if (digits <= 0) {
            throw new IllegalArgumentException("位数必须为正整数");
        }
        // 计算最小值（10^(digits-1)）和最大值（10^digits - 1）
        long min = (long) Math.pow(10, digits - 1);
        long max = (long) Math.pow(10, digits) - 1;
        // 生成 [min, max] 范围内的随机数
        Random random = new Random();
        return min + random.nextLong(max - min + 1);
    }

    //获取获取时间 年月日时分秒
    public static String getCurrentDate(String format) {
        LocalDateTime currentTime = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
        return currentTime.format(formatter);
    }


    public static String timeToDate(int timestampInSeconds) {
        // 2. 转换为毫秒数，并解析为 Instant 对象
        Instant instant = Instant.ofEpochSecond(timestampInSeconds);

        // 3. 转换为指定时区的 LocalDate（这里以北京时间为例）
        ZoneId zoneId = ZoneId.of("Asia/Shanghai");
        LocalDate localDate = instant.atZone(zoneId).toLocalDate();

        // 4. 格式化为年月日字符串（默认格式：yyyy-MM-dd）
        String formattedDate = localDate.toString();
        System.out.println("默认格式：" + formattedDate); // 输出：2025-08-20
        return formattedDate;
    }
    //对象转json字符串
    public static String objToJson(Object obj) {
        Gson gson = new Gson();
        return gson.toJson(obj);
    }

    //json字符串转对象
    public static <T> T jsonToObj(String json, Class<T> clazz) {
        Gson gson = new Gson();
        return gson.fromJson(json, clazz);
    }



}
